Adobe Campaign
Subsets writes experiment assignments into Adobe Campaign v8 (Managed Cloud, FDA and Enterprise/FFDA; not Campaign Standard) through Campaign's standard SOAP API. One row per person per experiment lands in a small standalone table, cus:subsetsExperimentAttributes. Your targeting workflows join on that table and keep the people whose experimentAssignment matches the value Subsets shows for a treatment. Each treatment's deliveries carry a delivery code, which links the sends in your delivery logs back to the treatment (see feedback data).
Requires Campaign v8.5 or later: Subsets authenticates with an OAuth Server-to-Server credential (Adobe).
Setup guide
1. Adobe Developer Console
- Create a project, then Add API > Adobe Campaign > OAuth Server-to-Server (Adobe).
- Attach the product profile of your Marketing instance. Campaign profiles are named
campaign - <instance> - <operator group internal name>(Adobe); the instance's admin profile is the known-working choice. - Add the I/O Management API to the same project. Its
read_organizationsscope is required; without it the instance rejects every call. - Share the credential's Client ID and Client secret with your Subsets admin over a secure channel.
2. Adobe Campaign
- Operator. Campaign creates the credential's operator on the first API call, in the operator group of the product profile (Adobe). If the operator was created by hand, give it a group under Administration > Access management > Operators.
- Table. Under Administration > Configuration > Data schemas, create
cus:subsetsExperimentAttributes(exactly that name) from the definition below, then run Tools > Advanced > Update database structure (Adobe). - IP allow list. In Control Panel, add the IP ranges Subsets provides with access type External API connection (Adobe).
3. Subsets
Under Settings > Integrations, expand Adobe Campaign and fill in:
| Field | Value |
|---|---|
| Instance URL | The URL your client console connects to, scheme and host only |
| IMS scopes | Leave empty |
| Client Id, Client Secret | From the credential |
Test connection checks the credential, the allow list and read access to the table. Run test export writes one permanent test row and is the write check.
Required permissions
| Where | Permission |
|---|---|
| Developer Console project | Adobe Campaign API and I/O Management API |
| Campaign operator | Read, insert and update on cus:subsetsExperimentAttributes; read on nms:delivery |
| Control Panel | Subsets' IP ranges allow-listed for External API connection |
The table
Enterprise (FFDA) definition
<srcSchema namespace="cus" name="subsetsExperimentAttributes" label="Subsets experiment attributes">
<element name="subsetsExperimentAttributes" label="Subsets experiment attributes"
autopk="true" autouuid="true" dataSource="nms:extAccount:ffda">
<key name="customerIdExperimentId">
<keyfield xpath="@customerId"/>
<keyfield xpath="@experimentId"/>
</key>
<attribute name="customerId" type="string" length="128" label="Customer id"
desc="The CRM customer id - must match the id exported in delivery logs"/>
<attribute name="experimentId" type="string" length="128" label="Experiment id"/>
<attribute name="experimentAddedAt" type="datetime" label="Experiment added at"/>
<attribute name="experimentName" type="string" length="255" label="Experiment name"/>
<attribute name="subscriberChurnRisk" type="double" label="Subscriber churn risk"/>
<attribute name="experimentAssignment" type="string" length="128" label="Experiment assignment"/>
</element>
</srcSchema>
FDA definition
<srcSchema namespace="cus" name="subsetsExperimentAttributes" label="Subsets experiment attributes">
<element name="subsetsExperimentAttributes" label="Subsets experiment attributes" autopk="true">
<key name="customerIdExperimentId">
<keyfield xpath="@customerId"/>
<keyfield xpath="@experimentId"/>
</key>
<attribute name="customerId" type="string" length="128" label="Customer id"
desc="The CRM customer id - must match the id exported in delivery logs"/>
<attribute name="experimentId" type="string" length="128" label="Experiment id"/>
<attribute name="experimentAddedAt" type="datetime" label="Experiment added at"/>
<attribute name="experimentName" type="string" length="255" label="Experiment name"/>
<attribute name="subscriberChurnRisk" type="double" label="Subscriber churn risk"/>
<attribute name="experimentAssignment" type="string" length="128" label="Experiment assignment"/>
</element>
</srcSchema>
| Column | Meaning |
|---|---|
customerId | The person's customer ID. It must be the same ID, in the same format, in the profile feed you send Subsets, in this table and in your delivery logs |
experimentId | The experiment's external ID |
experimentAddedAt | When the person was added to the experiment, UTC |
experimentName | The experiment name in Subsets |
subscriberChurnRisk | 30-day churn probability as a percentage, 0-100; omitted when the subscription has no score |
experimentAssignment | <experiment external id>-variant-<N>. Filter your targeting on this value |
Rows are inserted or updated by customerId + experimentId after each data import, normally daily. Control participants are never written.
Delivery codes
- Use one code per experiment treatment and stamp it on every delivery of that treatment, including recurring delivery templates.
- Codes are matched exactly, case included. Enter each code in Subsets exactly as stamped.
- Never reuse a code across experiments or treatments, and avoid dates in codes.
Subsets checks each code against your instance when you register it on the experiment.